Technical Q&A QA1314
Sequence Grabber - Ensuring the SG TimeBase is being driven by the Sound Clock.


Q: Sequence Grabber を使って音声と映像をキャプチャするときに、Video チャネルが使用するタイムベースを、サウンドクロックに基づくようにする方法はあるでしょうか。デフォルトでは、そのようになっていないようなのです。

A: あります。デフォルトでは、必ずしもそのようにはなっていません。

注意:

ここに示す動作は QuickTime 6.4 時点での動作ですが、QuickTime の将来のバージョンで変わる可能性があります。

Sequence Grabber が作成したタイムベースには、デフォルトのクロック(マイクロ秒クロック)が割り当てられ、そのタイムベースがビデオデジタイザに渡されます。Sound チャネルは、サウンド入力デバイスからのオーディオサンプルを数え、ビデオデジタイザから、対応するタイムスタンプを取得します。しかし、Sound チャネルが使用するタイムベースはサウンドクロックに基づいているため、この 2 つのクロックが異なると、ずれが生じます。

ジッタまたは同期化の問題を最小限に抑えるために、Sequence Grabber が使用するタイムベースに、Sound チャネルのタイムベースが基づいているクロックを割り当てることができます。リスト 1 に、これをアプリケーションで設定する方法を示します。

重要:

SGPrepareSGGetChannelTimeBase の呼び出しの前に呼び出す必要があります。さもなければ、Sound チャネルの TimeBase が初期化されません。


リスト 1. SG の TimeBase がサウンドクロックに基づくようにする。

{
TimeBase soundTimeBase = NULL, sgTimeBase = NULL;

// Sequence Grabber が使用している TimeBase を取得する
err = SGGetTimeBase(sg, &sgTimeBase);
if(noErr == err) {
// Sound チャネルが使用している TimeBase を取得する
err = SGGetChannelTimeBase(soundChannel, &soundTimeBase);
  }
if ((noErr == err) && (NULL != soundTimeBase)) {
// サウンドクロックを取得し、Sequence Grabber が使用している TimeBase に割り当てて
// 音声と映像の両方の TimeBase が単独のクロックに基づくことを
// 保証する
SetTimeBaseMasterClock(sgTimeBase,
(Component)GetTimeBaseMasterClock(soundTimeBase), NULL);
  }
}


参考資料:


[2003 年 10 月 24 日]